package com.Shuang.GameCards;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

//定义一个房间类，创建房间对象时就要把54张牌准备好
public class Room {
    private List<Card> cards = new ArrayList<>();

    // 在无参构造器中 将54张牌加到集合中去，以便外部创建房间对象时房间里就有了这54张牌
    public Room(){
        //设置点数
        String[] numbers = {"3", "4" , "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
        //设置花色
        String[] colors = {"♥", "♠", "♣", "♦"};
        //定义一个大小用来记录牌中点数的大小
        int size = 0;  //初始值设置为零

        //遍历点数和花色给到牌 此时只是遍历了52张牌 还有大小王要单独设计
        for (String number : numbers) {
            size++;  //每次取到一个点数让size++，相当于"3"对应 1 这个大小，"4"，对应 2 这个大小，以此类推
            for (String color : colors) {
                Card card = new Card(number, color, size);
                cards.add(card);
            }
        }

        //将大小王也添加进集合中
        //小王
        Card small = new Card("", "🤡", ++size);  //上述循环结束size 大小记录的是2的大小，++size直接给到小王就是小王大小
        //大王
        Card big = new Card("", "🃏", ++size);
        //直接将小王和大王都加进集合中去
        Collections.addAll(cards, small, big);

        System.out.println("新牌：" + cards);

    }

    //游戏开始
    public void start(){
        //洗牌 将集合中牌的顺序打乱
        Collections.shuffle(cards);
        System.out.println("洗过后的牌：" + cards);
        //发牌  斗地主 三个人 可以把三个人当成三个集合来看待 每个人先发17张牌，最后三张牌作为底牌留给地主
        List<Card> Liuhuahua = new ArrayList<>();
        List<Card> Liudahua = new ArrayList<>();
        List<Card> Liuxiaohua = new ArrayList<>();
        //分别给每个人发牌，发牌是依次来发，第一张给花花，第二张给大花，三张给小花，依次发下去 只发51张留3张底牌
        for (int i = 0; i < cards.size()-3; i++) {
            Card c = cards.get(i);
            if (i % 3 == 0){  //给第一个人发牌
                Liuhuahua.add(c);
            }else if (i % 3 == 1){
                Liudahua.add(c);
            }else if (i % 3 == 2){
                Liuxiaohua.add(c);
            }
        }

        //对用户的牌进行排序，按升序排序
        sortCards(Liuhuahua);
        sortCards(Liudahua);
        sortCards(Liuxiaohua);

//        看牌
        System.out.println("花花的牌：" + Liuhuahua);
        System.out.println("大花的牌：" + Liudahua);
        System.out.println("小花的牌：" + Liuxiaohua);
        //    最后三张留给地主
        List<Card> lastThreeCards = this.cards.subList(this.cards.size() - 3, this.cards.size());//截取最后三张牌放到集合中去
        System.out.println("底牌是：" + lastThreeCards);
        //假如刘小花是地主，把最后三张牌直接给到刘小花
        Liuxiaohua.addAll(lastThreeCards);
        sortCards(Liuxiaohua);
        System.out.println("地主刘小花的牌：" + Liuxiaohua);
    }
    //对用户的牌进行排序
//    private void sortCards(List<Card> cards) {
//        Collections.sort(cards, new Comparator<Card>() {
//            @Override
//            public int compare(Card o1, Card o2) {
//                return (o1.getSize() - o2.getSize());
//                return (o2.getSize() - o1.getSize()); //降序排序
//            }
//        });
//    }

    //将上述排序代码简化
    private void sortCards(List<Card> cards) {
        Collections.sort(cards,(o1, o2)->(o1.getSize() - o2.getSize()));
    }
}
